目標:多階段的 Dockerfile
的其中一個步驟發生錯誤時,可以用這個方法除錯比較方便
FROM node:16.18.1 as builder
WORKDIR /usr/app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
COPY src src
RUN npm run build --output-path=./dist/ --prod
FROM nginx
COPY --from=builder /usr/app/dist/ /var/www/html
WORKDIR /var/www/html
使用以下指令製作 image 時
docker build -t mylaptop/frontend .
npm run build
的那一個步驟出錯了
可以先修改 Dockerfile
,把出錯的那一個步驟以及以下的步驟都先註解掉,這樣個以保證可以把做到一半的 image 做出來:
FROM node:16.18.1 as builder
WORKDIR /usr/app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
COPY src src
# RUN npm run build --output-path=./dist/ --prod
# FROM nginx
# COPY --from=builder /usr/app/dist/ /var/www/html
# WORKDIR /var/www/html
製作作到一半的 image
docker build -t mylaptop/frontend .
之後可以用這個指令進入到 shell
docker run -it mylaptop/frontend bash
進入到 shell 之後就可以比較方便的嘗試各種方法來重現錯誤,以及嘗試各種方式除錯
最終修改後的 Dockerfile
FROM node:16.18.1 as builder
WORKDIR /usr/app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
COPY src src
# 需要加以下這一行
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y
RUN npm run build --output-path=./dist/ --prod
FROM nginx
COPY --from=builder /usr/app/dist/ /var/www/html
WORKDIR /var/www/html